/**
 * @fileoverview   event/custom 自定义事件模块
 * @author 2kid
 * @version 0.1
 * Date: 12-1-31
 * Time: 上午11:32
 */
F.reg('event/custom',function(f,event){


    function EventTarget(){
        this.handlers = {};
    }

    EventTarget.prototype = {
        constructor: EventTarget,
        /**
         * @name F.Event.custom.prototype.add
         * @function
         * @namespace 添加自定义事件
         * @param type 事件类型
         * @param handler 事件处理函数
         * @example
         * 例子：
         * 1.
         * //添加一个拖拽开始的事件
         * var drag=new event.custom;
         *  drag.add('dragstart',function(){});
         *  event.add('document','mousedown',function(e){
         *     if (e.target.className=='drag''){
         *         drag.fire({type:"dragstart", target: dragging, x: e.clientX, y: e.clientY,startOffset:startoffset});
         *     }
         *  });
         *
         */
        add: function(type, handler){
            if (typeof this.handlers[type] == "undefined"){
                this.handlers[type] = [];
            }

            this.handlers[type].push(handler);
        },
        /**
         * @name F.Event.custom.prototype.fire
         * @function
         * @namespace 触发自定义事件
         * @param event
         * @example
         * 例子：
         * 1.
         * //添加一个拖拽开始的事件
         * var drag=new event.custom;
         *  drag.add('dragstart',function(){});
         *  event.add('document','mousedown',function(e){
         *     if (e.target.className=='drag''){
         *         drag.fire({type:"dragstart", target: dragging, x: e.clientX, y: e.clientY,startOffset:startoffset});
         *     }
         *  });
         *
         */
        fire: function(event){
            if (!event.target){
                event.target = this;
            }
            if (this.handlers[event.type] instanceof Array){
                var handlers = this.handlers[event.type];
                for (var i=0, len=handlers.length; i < len; i++){
                    handlers[i](event);
                }
            }
        },
        /**
         * @name F.Event.custom.prototype.del
         * @namespace 删除自定义事件
         * @function
         * @param type 删除事件类型
         * @param handler 事件处理函数
         * @example
         * 例子：
         * 1.
         * //删除一个拖拽开始的事件
         * drag.del('dragstart',function(){});
         */
        del: function(type, handler){
            if (this.handlers[type] instanceof Array){
                if(handler){
                    var handlers = this.handlers[type];
                        for (var i=0, len=handlers.length; i < len; i++){
                            if (handlers[i] === handler){
                                break;
                            }
                        }
                    handlers.splice(i, 1);

                }else{
                    this.handlers[type]=[];
                }

            }
        }
    };
    /**
     * @name F.Event.custom
     * @function
     * @namespace 自定义事件
     * @example
     * 例子：
     *
     */
    event.custom=EventTarget;

    return event;

},{
   requires:[

   ]
});